package controller;

import java.awt.event.KeyEvent;

import javax.swing.ButtonGroup;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.KeyStroke;

import model.Constants;
import view.HoofdScherm;
import controller.MenuActions.AboutAction;
import controller.MenuActions.BestandAction;
import controller.MenuActions.ExitAction;
import controller.MenuActions.NavigeerAction;
import controller.MenuActions.ThemaAction;
import controller.MenuActions.VoegSlideToeAction;

/**
 * 
 * Deze klasse is verantwoordelijk voor het aanmaken van het menu en voor het
 * koppelen van een gepaste actie aan de menuItems
 *
 */
public class MenuController {
	// enige menucontroller
	private static MenuController instance = null;

	// maakt menubar en associeren er acties mee
	// We maken daarvoor gebruik van de Java Action klasse
	public void maakMenu() {
		
		//de menubar
		JMenuBar menuBar = new JMenuBar();
		JMenu bestandMenu = new JMenu(Constants.BESTAND);
		JMenu beeldMenu = new JMenu(Constants.BEELD);
		JMenu themaMenu = new JMenu(Constants.THEMA);
		JMenu infoMenu = new JMenu(Constants.INFO);

		bestandMenu.add(new BestandAction(Constants.LAADTEKSTBESTAND,
				Constants.LAADTEKSTBESTAND_DESCRIPTION, new Integer(
						KeyEvent.VK_A), KeyStroke.getKeyStroke("ctrl A"),
				Constants.TEKSTBESTAND, Constants.LADEN));
		bestandMenu.add(new BestandAction(Constants.LAADXMLBESTAND,
				Constants.LAADXMLBESTAND_DESCRIPTION,
				new Integer(KeyEvent.VK_L), KeyStroke.getKeyStroke("ctrl L"),
				Constants.XMLBESTAND, Constants.LADEN));
		bestandMenu.add(new BestandAction(Constants.BEWAARXMLBESTAND,
				Constants.BEWAARXMLBESTAND_DESCRIPTION, new Integer(
						KeyEvent.VK_B), KeyStroke.getKeyStroke("ctrl B"),
				Constants.XMLBESTAND, Constants.BEWAREN));
		bestandMenu.add(new BestandAction(Constants.BEWAARTEKSTBESTAND,
				Constants.BEWAARTEKSTBESTAND_DESCRIPTION, new Integer(
						KeyEvent.VK_E), KeyStroke.getKeyStroke("ctrl E"),
				Constants.TEKSTBESTAND, Constants.BEWAREN));
		bestandMenu.addSeparator();
		bestandMenu.add(new ExitAction(Constants.EINDE,
				Constants.EINDE_DESCRIPTION, new Integer(KeyEvent.VK_X),
				KeyStroke.getKeyStroke("ctrl X")));

		bestandMenu.setMnemonic(KeyEvent.VK_F);
		menuBar.add(bestandMenu);

		beeldMenu.add(new NavigeerAction(Constants.VOLGENDE,
				Constants.VOLGENDE_DESCRIPTION, new Integer(KeyEvent.VK_V),
				KeyStroke.getKeyStroke("V")));
		beeldMenu.add(new NavigeerAction(Constants.VORIGE,
				Constants.VORIGE_DESCRIPTION, new Integer(KeyEvent.VK_O),
				KeyStroke.getKeyStroke("O")));
		beeldMenu.add(new NavigeerAction(Constants.GANAAR,
				Constants.GANAAR_DESCRIPTION, new Integer(KeyEvent.VK_G),
				KeyStroke.getKeyStroke("G")));
		beeldMenu.add(new VoegSlideToeAction(Constants.VOEGTOE,
				Constants.VOEGTOE_DESCRIPTION, new Integer(KeyEvent.VK_T),
				KeyStroke.getKeyStroke("T")));

		beeldMenu.setMnemonic(KeyEvent.VK_S);
		menuBar.add(beeldMenu);

		JRadioButtonMenuItem standaardThemaItem = new JRadioButtonMenuItem(
				new ThemaAction(Constants.STANDAARDTHEMA,
						Constants.DESCRIPTION_STANDAARDTHEMA, new Integer(
								KeyEvent.VK_1), KeyStroke.getKeyStroke("1")));
		themaMenu.add(standaardThemaItem);

		JRadioButtonMenuItem colorFullThemaItem = new JRadioButtonMenuItem(
				new ThemaAction(Constants.COLORFULLTHEMA,
						Constants.DESCRIPTION_COLORFULLTHEMA, new Integer(
								KeyEvent.VK_1), KeyStroke.getKeyStroke("2")));
		themaMenu.add(colorFullThemaItem);

		JRadioButtonMenuItem complexThemaItem = new JRadioButtonMenuItem(
				new ThemaAction(Constants.COMPLEXTHEMA,
						Constants.DESCRIPTION_COMPLEXTHEMA, new Integer(
								KeyEvent.VK_1), KeyStroke.getKeyStroke("3")));
		themaMenu.add(complexThemaItem);

		ButtonGroup themaGroep = new ButtonGroup();

		themaGroep.add(standaardThemaItem);
		themaGroep.add(colorFullThemaItem);
		themaGroep.add(complexThemaItem);
		// thema dat standaard wordt gezet
		colorFullThemaItem.setSelected(true);

		themaMenu.setMnemonic(KeyEvent.VK_T);
		menuBar.add(themaMenu);

		infoMenu.add(new AboutAction(Constants.INFO,
				Constants.INFO_DESCRIPTION, new Integer(KeyEvent.VK_I),
				KeyStroke.getKeyStroke("I")));

		infoMenu.setMnemonic(KeyEvent.VK_I);
		menuBar.add(infoMenu);
		HoofdScherm.getInstance().setJMenuBar(menuBar);

	}

	private MenuController() {
		maakMenu();
	}

	public static MenuController getInstance() {
		if (instance == null) {
			instance = new MenuController();
		}
		return instance;
	}

}
